home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tex / macros / source / contrib / supported / xypic / ps / xy212dict.ps
Text File  |  1995-03-15  |  8KB  |  228 lines

  1. %!PS-Adobe-3.0 Resource-procset
  2. %%Title: xy212dict.ps
  3. %%Version: 2.12
  4. %%Creator: XY-ps backend to XY-pic
  5. %%DocumentSuppliedProcSets: XYdict
  6. %%For: use with XY-pic
  7. %%BeginResource: procset XYdict
  8. /XYdict where not{200 dict /XYdict exch def
  9. /xy{XYdict begin countdictstack /xylevel exch def
  10. xyopen xycolor stopped xyclose cleartomark end}def
  11. /xyc{{xysetcol}xy}def /xycc{{xychgcol}xy}def XYdict}if
  12. begin
  13. /xyopen{currentdict /XYddict known{XYddict null eq{}{XYddict begin xyopen}ifelse}if}def
  14. /xyclose{countdictstack -1 xylevel 1 add{pop end}for}def
  15. /xycolor{0 setgray}bind def
  16. end
  17.  
  18.  
  19. XYdict begin
  20.  
  21. /xyopen{currentdict /XYddict known{XYddict null eq{}{XYddict begin xyopen}ifelse}if}def
  22. /xycolor{0 setgray}bind def
  23.  
  24. /xyclose{countdictstack -1 xylevel 1 add{pop end}for}def
  25. /xypush{8 dict /XYddict exch def XYddict begin}def
  26. /undef where
  27. {pop /xypop{countdictstack xylevel eq{}{end}ifelse
  28. currentdict /XYddict undef}def}{/xypop{countdictstack xylevel eq{}{end}ifelse
  29. /XYddict null def}def}ifelse
  30.  
  31. /xychgcol{/xycolor exch def}def
  32. /xysetcol{xypush xychgcol}def
  33.  
  34. /xysize 10 def
  35. /xypspt{72 72.27 div dup scale}bind def
  36. /dimendiv{65536 div}bind def
  37. /xysegl 327680 dimendiv def
  38. /xyopp{1 -1 scale}bind def
  39.  
  40. /pscorrect{.85 mul}bind def
  41. /xy{countdictstack /xylevel exch def xyopen xycolor stopped
  42. xyclose cleartomark}def
  43. /xywidth{26213 dimendiv pscorrect setlinewidth}bind def
  44. /xydash{[] 0 setdash}bind def
  45. /xycap{1 setlinecap}bind def
  46. /xyjoin{1 setlinejoin}bind def
  47. /xycolor{0 setgray}bind def
  48.  
  49. /xyfont{4096 add 64 div round 64 mul 4096 sub}def
  50. /xysdfont{4096 add 32 div round 32 mul 4096 sub}def
  51. /xydots{xywidth 1 setlinecap [0 2] 0 setdash}bind def
  52.  
  53. /setupDirection{dup -2048 lt{3072 add neg 1024 exch}
  54. {dup 0 lt{1024 add neg -1024}{dup 2048 lt{1024 sub -1024 exch}
  55. {3072 sub 1024}ifelse}ifelse}ifelse atan
  56. dup 180 gt{360 sub}if dup /XYdirection exch def rotate}def
  57.  
  58. /xyCheckDir{dup 8 div 3 mul 3 -1 roll sub neg exch div 360 mul
  59. dup dup XYdirection sub 180 div round 180 mul XYdirection add
  60. dup 3 -1 roll sub abs 10 gt not{exch}if pop}def
  61.  
  62. /xyrulth{26213 dimendiv pscorrect setlinewidth
  63. 0 setlinecap}bind def
  64.  
  65. /gsavexy{gsave xypspt XYdirection rotate xywidth newpath 0 0 moveto}def
  66. /gchksavexy{gsave xypspt setupDirection xywidth newpath 0 0 moveto}def
  67.  
  68. /gstartxy{gsave xypspt xywidth xycap xyjoin newpath 0 0 moveto}def
  69. /grulexy{gsave xyrulth newpath 0 0 moveto}def
  70. /xystroke{stroke grestore}bind def
  71.  
  72. /arc4pop{arcto 4{pop}repeat}bind def
  73. /xyswap{XYdirection 180 add /XYdirection exch def}def
  74.  
  75. /xyline{gstartxy setupDirection rlineto xystroke}def
  76. /dash{exch gchksavexy xysegl XYdirection dup
  77. -90 lt{pop neg}{90 gt{neg}if}ifelse exch{neg}if
  78. 0 rlineto xystroke}def
  79. /stopper{gstartxy setupDirection 0 xysegl 2 div rmoveto
  80. 0 xysegl neg rlineto xystroke }def 
  81. /solid{gstartxy xydash xycap neg exch neg exch rlineto xystroke}def
  82. /dashed{gstartxy 2 copy dup mul exch dup mul add sqrt dup
  83. xysegl add xysegl 2 mul div round 2 mul 1 sub div [ exch dup ] 0 setdash
  84. xycap neg exch neg exch rlineto xystroke}def
  85.  
  86. /dot{gstartxy 2 setlinecap [0 2] 0 setdash
  87. 1 0 rlineto xystroke}def
  88. /dotted{gstartxy 2 copy dup mul exch dup mul add sqrt dup
  89. 2 div round 1 add div 2 setlinecap [0 3 -1 roll] 0 setdash
  90. neg exch neg exch rlineto 0 0 rlineto xystroke}def
  91.  
  92. /cubic{gstartxy xycap docubic} def
  93. /docubic{chkvalid
  94. {chkcubedge 8 -2 roll moveto curveto xystroke pop}
  95. {cleartomark grestore}ifelse}def
  96. /chkcubedge{2 copy 1.0 eq{0.0 eq{pop pop}{cubicedge}ifelse}
  97. {pop cubicedge}ifelse}def
  98.  
  99. /dotcubic{gstartxy 1 setlinecap [0 2] 0 setdash docubic}def
  100. /dashcubic{gstartxy xycap [5 5] 0 setdash docubic}def
  101.  
  102. /squine{gstartxy xycap dosquine}def
  103. /dosquine{chkvalid
  104. {chksquedge 2 copy moveto xysq2cub curveto xystroke pop}
  105. {cleartomark grestore}ifelse}def
  106.  
  107. /chkvalid{2 copy lt{dup 1 gt{false}{true}ifelse}{false}ifelse}def
  108.  
  109. /chksquedge{2 copy 1.0 eq{0.0 eq{pop pop}{squineedge}ifelse}
  110. {pop squineedge}ifelse}def
  111. /xysq2cub{xysq2cubit 6 1 roll xysq2cubit 6 1 roll 3 index 3 index
  112. xysq2cubit 6 1 roll xysq2cubit 6 1 roll pop pop}def
  113. /xysq2cubit{2 index 2 mul add 3 div}def
  114.  
  115. /dotsquine{gstartxy 1 setlinecap [0 2] 0 setdash dosquine}def
  116. /dashsquine{gstartxy xycap [5 5] 0 setdash dosquine}def
  117.  
  118. /xy4mul{8 copy
  119. 5 -1 roll mul 5 1 roll 6 -1 roll mul 6 1 roll
  120. 3 -1 roll mul exch 4 -1 roll mul 3 1 roll
  121. add 3 1 roll add exch 10 2 roll
  122. 7 -1 roll mul 7 1 roll 4 -1 roll mul 5 1 roll
  123. 4 -1 roll mul 4 1 roll mul add 3 1 roll add
  124. exch 3 -1 roll }def 
  125. /xy44mul{
  126. 4 copy 16 4 roll exch 3 1 roll 4 copy 12 4 roll
  127. xy4mul 12 4 roll xy4mul 12 -4 roll 4 copy 16 4 roll
  128. 8 4 roll xy4mul 12 4 roll xy4mul}def
  129.  
  130. /cubicedge{10 2 roll
  131. exch 8 1 roll 3 -1 roll dup dup 9 2 roll
  132. 5 -1 roll dup dup 9 1 roll 8 3 roll
  133. 4 1 roll dup dup 5 3 roll dup dup 5 1 roll 3 -1 roll
  134. 18 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll
  135. xy444mul
  136. pop pop pop 13 1 roll pop pop pop 9 1 roll
  137. 10 1 roll pop 8 1 roll 7 1 roll 8 1 roll pop 5 1 roll 3 1 roll
  138. }def
  139.  
  140. /xy444mul{
  141. 4 copy 24 4 roll 12 -4 roll 16 4 roll 4 copy 16 4 roll
  142. xy44mul 20 8 roll xy44mul
  143. 12 -4 roll
  144. 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch 4 2 roll
  145. 16 8 roll 8 4 roll
  146. 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch 4 2 roll
  147. 8 4 roll 16 4 roll 8 4 roll 20 -4 roll exch 3 1 roll
  148. 4 copy 20 4 roll 4 copy 16 4 roll 4 copy 12 4 roll
  149. xy4mul 28 4 roll xy4mul 20 4 roll xy4mul 12 4 roll xy4mul}def
  150.  
  151. /squineedge{8 2 roll
  152. exch 5 1 roll 3 -1 roll dup 6 2 roll 1 index exch
  153. 10 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll
  154. xy44mul 4 1 roll pop 5 1 roll 6 1 roll 3 -1 roll pop}def
  155.  
  156. /xyshort{2 copy abs exch abs add xysegl .5 mul lt
  157. {pop pop grestore}{rlineto xystroke}ifelse}def
  158.  
  159. /tipwidth{xywidth xycap}def
  160.  
  161. /halftip{tipwidth xysize 10 div 0 0 moveto
  162. -.25 0 3 -1 roll -2.5 mul 0 xysize 2 div neg
  163. dup .62 mul 2 div neg curveto}bind def
  164.  
  165. /atip{gchksavexy halftip xystroke}def
  166. /btip{gchksavexy xyopp halftip xystroke}def
  167. /tip{gchksavexy gsave halftip stroke grestore
  168. xyopp halftip xystroke}def
  169. /halfcmtip{tipwidth 0 0 moveto
  170. -.1333 xysize mul 0 .2 xysize mul neg dup .125 xysize mul
  171. 3 -1 roll .25 xysize mul curveto}bind def
  172.  
  173. /cmatip{gchksavexy halfcmtip xystroke}def
  174. /cmbtip{gchksavexy xyopp halfcmtip xystroke}def
  175. /cmtip{gchksavexy gsave halfcmtip stroke grestore
  176. xyopp halfcmtip xystroke}def
  177. /halfTip{360 32 div neg rotate halftip}bind def
  178. /halfTtip{.31 mul 1 atan rotate halftip}bind def
  179. /aTip{gchksavexy halfTip xystroke}def
  180. /bTip{gchksavexy xyopp halfTip xystroke}def
  181. /Tip{gchksavexy gsave halfTip stroke grestore
  182. xyopp halfTip xystroke}def
  183. /Ttip{gchksavexy xysegl neg 0 rlineto 0 0 moveto
  184. gsave -1 halfTtip stroke grestore
  185. xyopp -1 halfTtip xystroke}def
  186. /halfturn{xysegl 2 div dup dup neg exch rmoveto
  187. 0 exch dup exch -180 -90 arc}bind def
  188. /aturn{gchksavexy halfturn xystroke}def
  189. /bturn{gchksavexy xyopp halfturn xystroke}def
  190. /xysqll 231705 dimendiv def
  191. /squigl{gchksavexy xysqll dup neg 0 rmoveto
  192. 2 div dup dup neg dup 3 -1 roll
  193. 2 sqrt mul dup 5 1 roll
  194. 135 45 arcn dup 3 -1 roll -135 -45 arc
  195. xystroke}def
  196.  
  197. /fullhook{0 xysegl 2 div dup -90 90 arcn}bind def
  198. /ahook{gchksavexy fullhook xystroke}def
  199. /bhook{gchksavexy xyopp fullhook xystroke}def
  200. /halfhook{xysegl 2 div dup 0 exch 180 90 arcn}bind def
  201. /hook{gchksavexy gsave halfhook stroke grestore
  202. xyopp halfhook xystroke}def
  203. /xyqcirc{dup dup neg exch translate newpath
  204. dup neg 0 exch moveto 0 0 3 -1 roll -90 0 arc}bind def
  205.  
  206. /circ{gstartxy
  207. 3 copy pop 2 copy cos mul 3 1 roll sin mul
  208. rmoveto 0 0 5 2 roll arc xystroke}bind def
  209.  
  210. /circhar{gsave dup 3 gt{7 sub neg}if dup
  211. 3 eq{pop dup 2 sqrt -2 div mul}{dup 1 eq{pop dup 2 sqrt 2 div mul}
  212. {0 eq{dup}{0}ifelse}ifelse}ifelse
  213. 0 translate 3 1 roll circ grestore}bind def
  214.  
  215. userdict begin
  216. /gray{setgray}bind def /gray@{setgray}bind def
  217. /rgb{setrgbcolor}bind def /rgb@{setrgbcolor}bind def
  218. /hsb{sethsbcolor}bind def /hsb@{sethsbcolor}bind def
  219. /setcmykcolor where{pop}{/setcmykcolor{dup 3 1 roll dup 5 1 roll
  220. exch sub 1 add 5 1 roll exch sub 1 add 4 1 roll
  221. exch sub 1 add 3 1 roll setrgbcolor}bind def}ifelse
  222. /cmyk{setcmykcolor}bind def /cmyk@{setcmykcolor}bind def
  223. /sethalftone where{/sethalftone load /tone exch def}if
  224. end
  225.  
  226. end
  227. %%EndResource
  228.